Integrantes

Apellido, Nombre Código Correo Electronico
Alvarado Vargas, Fabian 201910354
Murga Díaz, Nathalie 202110238
Flores Soto, Ronaldo Dylan 202110122
Vilcarromero Moscoso, Rodo Arturo 202010431
Hilario Quintana, Jeffry 202020082

Introducción

La moda es una industria global en constante evolución y uno de los mayores impulsores del comercio internacional. Los consumidores buscan constantemente nuevas tendencias y estilos únicos, lo que hace que la industria de la moda sea altamente competitiva. Para ayudar a los minoristas a mantenerse al día con las últimas tendencias y preferencias de los consumidores, se están desarrollando nuevas herramientas de análisis de datos y motores de búsqueda para la moda.

Relevancia y Justificación:

En este contexto, el desarrollo de un gestor de motor de búsqueda para la elaboración de recomendaciones sobre las preferencias de la ropa de moda en la India se vuelve crucial para mejorar la capacidad de las empresas de este sector para ofrecer productos más acordes a las necesidades y gustos de los consumidores. Además, este tipo de herramientas tecnológicas permiten recopilar grandes cantidades de datos sobre las preferencias de los consumidores de manera eficiente, lo que es vital para mejorar la eficacia y eficiencia de la toma de decisiones empresariales.

Objetivos:

Objetivo Principal:

Nuestro objetivo de este trabajo es presentar un gestor de motor de búsqueda para elaborar recomendaciones sobre las preferencias de la ropa de moda en la India. Para ello, se analizará una base de datos que incluye información sobre los gustos y preferencias de los consumidores en cuanto a diferentes tipos de prendas y estilos de moda.

Objetivos Secundarios

A partir de esta información, se desarrollará un modelo de recomendación que permita a las empresas del sector ofrecer productos más acordes a las necesidades y gustos de los consumidores, contribuyendo así a mejorar su competitividad y su capacidad de satisfacer las demandas del mercado.

  • Identificar los productos más caros
  • Identificar los colores más repetidos que llevan el aumento de precio
  • Identificar que productos que prefiere la población, su precio, color y para que géneros
  • Analizar qué productos en el mercado de la India son más caros y para qué género
  • Identificar los colores preferidos de la población con relación a su género

Datos

Recolección de datos

Se ha seleccionado la data de una base de datos de Kaggle con el nombre “Fashion Clothing Products Dataset” el cual presenta una población de 10000 valores. La base de datos se origina en Myntra.com, Myntra es una importante empresa india de comercio electrónico de moda con sede en Bengaluru, Karnataka, India. La empresa se fundó en 2007 para vender artículos de regalo personalizados. En mayo de 2014 , FlipKart adquirió Myntra.com.

Empezaremos cargando nuestra base de datos

library(readr)
## Warning: package 'readr' was built under R version 4.2.3
library(dplyr)
library(modeest)
## Warning: package 'modeest' was built under R version 4.2.3
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
library(plotrix)

dataframe<-read_csv("myntra_products_catalog.csv")
dataframe

Población Objetivo

Seleccionaremos una muestra de 1000 variables para poder cumplir nuestros objetivos y poder responder de manera adecuada cada pregunta usando los análisis y limpieza de los datos que hemos aprendido a lo largo de este curso.

A continuación seleccionaremos nuestra muestra

dataMuestra<-dataframe[1:1000,]
dataMuestra

y continuaremos con nuestro estudio en base a esta

Variables de estudio iniciales

Para la base de datos presentamos las siguientes variables:

Nombre de variable Tipo de variable Descripción
ProductoId cualitativa Es nuestra llave primaria para cada producto, única en toda la base de datos
NombreProducto cualitativa El nombre del producto
MarcaProducto cualitativa La marca que fabrica el producto
Género cualitativa El género el cual esta destinado para el producto
PrecioUSD cuantitativa El precio en Rupias(INR) convertido a dolares estadounidenses(USD)
NumImagenes cuantitativa Cantidad de imágenes que hay para el producto
Descripción cualitativa Una pequeña descripción sobre el producto
ColorPrimario cualitativa Color del producto

Actualizamos el nombre de nuestras columnas para una mejor visualización de nuestro estudio

colnames(dataMuestra)
## [1] "ProductID"    "ProductName"  "ProductBrand" "Gender"       "Price (INR)" 
## [6] "NumImages"    "Description"  "PrimaryColor"
colnames(dataMuestra)<-c("ProductoId","NombreProducto","MarcaProducto","Genero","PrecioUSD","NumImagenes","Descripción","ColorPrimario")

Ahora nuestras columnas se llamaran

colnames(dataMuestra)
## [1] "ProductoId"     "NombreProducto" "MarcaProducto"  "Genero"        
## [5] "PrecioUSD"      "NumImagenes"    "Descripción"    "ColorPrimario"

Control de los Na en las variables

any(is.na(dataMuestra$ProductoId))
## [1] FALSE
any(is.na(dataMuestra$NombreProducto))
## [1] FALSE
any(is.na(dataMuestra$MarcaProducto))
## [1] FALSE
any(is.na(dataMuestra$Genero))
## [1] FALSE
any(is.na(dataMuestra$PrecioUSD))
## [1] FALSE
any(is.na(dataMuestra$NumImagenes))
## [1] FALSE
any(is.na(dataMuestra$Descripción))
## [1] FALSE
any(is.na(dataMuestra$ColorPrimario))
## [1] TRUE

Detectamos que color primario cuenta con valores Na entonces procedemos a corregirlo

dataMuestra$ColorPrimario[is.na(dataMuestra$ColorPrimario)]<-"No color"
any(is.na(dataMuestra$ColorPrimario))
## [1] FALSE

Convertimos la rupia del Precio del producto a dolares estadounidenses

dataMuestra$PrecioUSD<-dataMuestra$PrecioUSD*0.012
dataMuestra$PrecioUSD[1:10]
##  [1] 140.940  69.720  10.788  67.188   9.108   9.492   8.628  10.788   7.968
## [10] 208.320

La moda de los productos.

getmode <- function(mod) {
   uniqv <- unique(mod)
   uniqv[which.max(tabulate(match(mod, uniqv)))]
}
modNombreProducto <- dataMuestra$NombreProducto
result <- getmode(modNombreProducto)
print(result)
## [1] "Parx Men Blue Slim Fit Checked Casual Shirt"
#OTRA FORMA
mfv(dataMuestra$NombreProducto,method="mlv")
## [1] "Parx Men Blue Slim Fit Checked Casual Shirt"
tablaNombreProducto<-table(modNombreProducto)

maxNombreProducto<-max(tablaNombreProducto)
print(maxNombreProducto)
## [1] 16
# Convertir la tabla en un dataframe
tabla_df <- as.data.frame(tablaNombreProducto)
# Acceder al conteo
conteo <- tabla_df$Freq
# Definir el valor umbral para cambiar el color de la barra
ggplot(tabla_df,aes(x=tabla_df$modNombreProducto,y=tabla_df$Freq)) +
  geom_bar(stat = "identity", fill = ifelse(conteo == maxNombreProducto, "green", "blue")) +
  labs(x = "Nombre Producto", y = "Cant. Apariciones") +
  ggtitle("Gráfico de barras - NombreProducto") +
  theme_minimal()
## Warning: Use of `tabla_df$modNombreProducto` is discouraged.
## ℹ Use `modNombreProducto` instead.
## Warning: Use of `tabla_df$Freq` is discouraged.
## ℹ Use `Freq` instead.

ProductosPreferidos<-dataMuestra %>%
  filter(dataMuestra$NombreProducto==result)

precios<- as.data.frame(table(ProductosPreferidos$PrecioUSD))
colores<-as.data.frame(table(ProductosPreferidos$ColorPrimario))
sexos<-as.data.frame(table(ProductosPreferidos$Genero))

EXPLICACIÓN:

Podemos observar en mediante este gráfico de barras que el nombre que más pedido en MYNTRA es “Parx Men Blue Slim Fit Checked Casual Shirt” con un total de 16 veces pedido. Además de que su rango de precios es entre:

range(as.double(as.character(precios$Var1)))
## [1]  8.148 11.268
print(colores$Var1)
## [1] Blue
## Levels: Blue
print(sexos$Var1)
## [1] Men
## Levels: Men

Podemos concluir que los hombres, que compran “Parx Men Blue Slim Fit Checked Casual Shirt” a un precio entre 8.148 y 11.268 les gusta el color azul.

La moda de la marca del producto

getmode <- function(mod) {
   uniqv <- unique(mod)
   uniqv[which.max(tabulate(match(mod, uniqv)))]
}

mod <- dataMuestra$MarcaProducto

result <- getmode(mod)
print(result)
## [1] "Parx"
tablaMarca<-table(dataMuestra$MarcaProducto)

maxMarca<-max(table(dataMuestra$MarcaProducto))
print(maxMarca)
## [1] 112
# Convertir la tabla en un dataframe
tabla_df <- as.data.frame(tablaMarca)
# Acceder al conteo
conteo <- tabla_df$Freq
# Definir el valor umbral para cambiar el color de la barra
ggplot(tabla_df,aes(x=tabla_df$Var1,y=tabla_df$Freq)) +
  geom_bar(stat = "identity", fill = ifelse(conteo == maxMarca, "green", "blue")) +
  labs(x = "Marca Producto", y = "Cant. Apariciones") +
  #ggline(promedioMarca ~range())
  ggtitle("Gráfico de barras - MarcaProducto") +
  theme_minimal()
## Warning: Use of `tabla_df$Var1` is discouraged.
## ℹ Use `Var1` instead.
## Warning: Use of `tabla_df$Freq` is discouraged.
## ℹ Use `Freq` instead.

MarcaPreferida<-dataMuestra%>%
  filter(dataMuestra$MarcaProducto==result)
precio<-as.data.frame(table(MarcaPreferida$PrecioUSD))
color<-as.data.frame(table(MarcaPreferida$ColorPrimario))
sexos<-as.data.frame(table(MarcaPreferida$Genero))

EXPLICACIÓN:

Podemos observar en mediante este gráfico de barras la marca “Parx” en MYNTRA es la preferida de los clientes siendo un total de 112 veces pedido

range(as.double(as.character(precio$Var1)))
## [1]  4.188 11.748
print(color)
##        Var1 Freq
## 1     Beige    1
## 2     Black    1
## 3      Blue   55
## 4     Brown    2
## 5     Green    6
## 6      Grey    9
## 7     Khaki    3
## 8    Maroon    4
## 9  No color    1
## 10     Pink    5
## 11   Purple    1
## 12      Red   12
## 13    White   10
## 14   Yellow    2
print(sexos)
##   Var1 Freq
## 1  Men  112

Podemos concluir que los hombres que prefieren la marca “Parx”, compran sus productos a precios entre 4.188 y 11.748, a la mayoría de dicha población les gusta el azul, pero que tambien escogen una gran variedad de colores.

La moda del género

result <- mlv(dataMuestra$Genero,method="mfv")
print(result)
## [1] "Men"   "Women"

Podemos observar que la variable “Genero” es bimodal, ya que posee como a “Men” y “Women” como resultado de su moda.

tablaGenero<-table(dataMuestra$Genero)
maxGenero<-max(table(dataMuestra$Genero))

# Convertir la tabla en un dataframe
tabla_df <- as.data.frame(tablaGenero)
# Acceder al conteo
conteo <- tabla_df$Freq

# Definir el valor umbral para cambiar el color de la barra
ggplot(tabla_df,aes(x=tabla_df$Var1,y=tabla_df$Freq)) +
  geom_bar(stat = "identity", fill = ifelse(conteo == maxGenero, "green", "blue")) +
  labs(x = "Genero", y = "Cant. Apariciones") +
  ggtitle("Gráfico de barras-Genero") +
  theme_minimal()
## Warning: Use of `tabla_df$Var1` is discouraged.
## ℹ Use `Var1` instead.
## Warning: Use of `tabla_df$Freq` is discouraged.
## ℹ Use `Freq` instead.

EXPLICACIÓN:

Con este diagrama de barras se puede observar con mejor detenimiento como es que se distribuye la variable “Genero”, también podemos observar que la menor variable de apariciones es “Girls”. Por lo que podemos concluir que los productos en MYNTRA están más enfocados para “Men” y “Woman”, además de que “Girls” no es tan demandado en temas de “ropa de moda”.

La media de precios de la empresa en USD

mean(dataMuestra$PrecioUSD)
## [1] 20.80039

La variable “PrecioUSD” tiene un promedio de 20.80039, pero esta información no puede ser muy confiable ya que existen formas de dar falsa información.

La mediana de precios de la empresa en USD

MedianaPrecio<-median(dataMuestra$PrecioUSD)
print(MedianaPrecio)
## [1] 10.788

Podemos observar que la tendencia central en la variable “PrecioUSD” es de 10.788 dolares.

La moda de precios de la empresa en USD

getmode <- function(mod) {
   uniqv <- unique(mod)
   uniqv[which.max(tabulate(match(mod, uniqv)))]
}
mod <- dataMuestra$PrecioUSD
result <- getmode(mod)
print(result)
## [1] 8.388
cantResult=max(table(mod))
print(cantResult)
## [1] 63

Podemos observar que el precio 8.388 en la variable “PrecioUSD” es el que más se repite, siendo un total de 63 veces.

tablaPrecio<-table(dataMuestra$PrecioUSD)
tabla_df <- as.data.frame(tablaPrecio)
maxCantPrecio<-max(tablaPrecio)
conteo<-tabla_df$Freq
# Acceder al conteo
plot(tabla_df,aes(x=tabla_df$Var1,y=tabla_df$Freq),main="Rango de los precios",col="red",xlab="PreciosUSD",ylab="Cant. Apariciones")+
geom_line(stat = "identity", fill = ifelse(conteo == maxCantPrecio, "green", "blue"))
## Warning in geom_line(stat = "identity", fill = ifelse(conteo == maxCantPrecio, :
## Ignoring unknown parameters: `fill`

## NULL

EXPLICACION:

Podemos observar de mejor manera como se distribuyen los precios respecto a sus apariciones, notando de que la cantidad de más apariciones es del precio 8.38 con un total de 63 veces además de que los precios menos 25 dolares son la preferencia de los clientes.

El rango de los precios

rango<-range(dataMuestra$PrecioUSD)
print("inicia en:")
## [1] "inicia en:"
print(rango[1])
## [1] 3.108
print("termina en:")
## [1] "termina en:"
print(rango[2])
## [1] 373.2

Los valores en la variable “PrecioUSD” están en un rango entre 3.108 y 373.2.

hist(dataMuestra$PrecioUSD,col=c("red","blue","yellow","pink"),main="Histograma de precios",xlab="Precios en USD", ylab= "Cantidad")

EXPLICACIÓN:

Se puede observar de mejor manera como la mayor cantidad de apariciones en los precios son inferiores a los 50 dolares aproximadamente, y que los precios con menos apariciones son mayores a 100 dolares proximadamente. Concluyendo que los clienetes prefieren los productos más baratos a 50 dolares.

El rango intercuartil de precios

Q1=quantile(dataMuestra$PrecioUSD,0.25)#Q1
Q3=quantile(dataMuestra$PrecioUSD,0.75)#Q1
Q3-Q1
##   75% 
## 11.76
#segunda forma
IQR(dataMuestra$PrecioUSD)
## [1] 11.76
boxplot(dataMuestra$PrecioUSD,col=c('yellow'),horizontal = T,main="Rango de precios USD")

EXPLICACIÓN:

En esta boxplot podemos observar que es sesgado a la derecha con valores menores a 50 dolares, con n datos atípicos y que su su mediana está alrededor de los 25 dolares aproximadamente. Podemos concluir que la parte más corta es inferior a la mediana, y la media es mayor a la mediana.

La desviacion estandar

sd(dataMuestra$PrecioUSD)#cuanto se dispersa el precio con respecto al promedio
## [1] 34.85258

La varianza del precio

var(dataMuestra$PrecioUSD)
## [1] 1214.702

El coeficiente de variación del precio

coef_var <- function(cv, na.rm = TRUE) {
  sd(cv, na.rm=na.rm) / mean(cv, na.rm=na.rm)
}
cv <- dataMuestra$PrecioUSD
print(coef_var(cv))
## [1] 1.675573

La moda de las imagenes

getmode <- function(mod) {
   uniqv <- unique(mod)
   uniqv[which.max(tabulate(match(mod, uniqv)))]
}

mod <- dataMuestra$NumImagenes
result <- getmode(mod)
print(result)
## [1] 5
boxplot(dataMuestra$NumImagenes,horizontal = T,col="skyblue",main="Numero de Img")

print("Promedio:")
## [1] "Promedio:"
mean(dataMuestra$NumImagenes)
## [1] 4.607
print("Mediana:")
## [1] "Mediana:"
median(dataMuestra$NumImagenes)
## [1] 5

EXPLICACIÓN:

Podeos observar que tambien presenta datos atípicos, pero algo curioso pasa en este boxplot, podemos ver que la mediana, media y la moda es aproximadamente 5, es decir podemos concluir que la distribución es simétrica.

tablaImagenes<-table(mod)
barplot(tablaImagenes,col=c('red','blue','pink','yellow','brown','skyblue','lightgreen'),main="Diagra de barras de Num. Imagenes")

> ## EXPLICACIÓN:

De una mejor manera podemos observar como es que las cantidades de los precios es que se encuentran. Con ello podemos concluir que las empresas con mayor éxito solo necesitan 5 imágenes para captar la atención del cliente.

Identificar el producto más caro

max(dataMuestra$PrecioUSD)
## [1] 373.2
productoCaro<-dataMuestra%>%
  filter(dataMuestra$PrecioUSD==max(dataMuestra$PrecioUSD))
productoCaro

El producto más caro es de la marca “DKNY” para los generos de “Unisex” con un precio de 373.2 dolares.

Identificar los colores más repetidos que llevan el aumento de precio

Modcolor<-getmode(dataMuestra$ColorPrimario)
print(Modcolor)
## [1] "Blue"
preguntaColor<-dataMuestra %>%
  filter(dataMuestra$ColorPrimario==Modcolor)
ModPrecioColor<-getmode(preguntaColor$PrecioUSD)
print(ModPrecioColor)
## [1] 8.388
cantResultColor<-max(table(preguntaColor$PrecioUSD))

barplot(table(preguntaColor$PrecioUSD), col= ifelse(table(preguntaColor$PrecioUSD)==cantResultColor,"red","green"), main="Diagrama de barras de los precios para los colores preferidos")

range(preguntaColor$PrecioUSD)
## [1]  3.192 67.188
MasCaro<-preguntaColor%>%
  filter(preguntaColor$PrecioUSD==max(preguntaColor$PrecioUSD))
print(MasCaro)
## # A tibble: 1 × 8
##   ProductoId NombreProducto       Marca…¹ Genero Preci…² NumIm…³ Descr…⁴ Color…⁵
##        <dbl> <chr>                <chr>   <chr>    <dbl>   <dbl> <chr>   <chr>  
## 1   10015921 Raymond Men Blue Se… Raymond Men       67.2       5 Blue s… Blue   
## # … with abbreviated variable names ¹​MarcaProducto, ²​PrecioUSD, ³​NumImagenes,
## #   ⁴​Descripción, ⁵​ColorPrimario

EXPLICACIÓN:

Podemos observar que el color azul es el más preferido de las empresas, también que su precio más repetido es de 8.388, y se encuentra en un rango de 67.188, además de que observamos de que el producto más caro con un precio de 67.188, que es destinado a los hombre, es para la marca Raymond.

Con lo que podemos concluir que al alza de precio para los colores más caros, depende de la “Marca” y para el “Cliente”.

Cuales son los precios más caros para los Varones

table(dataMuestra$Genero) 
## 
##   Boys  Girls    Men Unisex  Women 
##     63     43    373    148    373
preguntaBoys<- dataMuestra %>%
  filter(dataMuestra$Genero=='Boys')

MaxBoys=max(preguntaBoys$PrecioUSD)
print('Precio maximo para Boys:')
## [1] "Precio maximo para Boys:"
print(MaxBoys)
## [1] 20.388
preguntaMen<- dataMuestra %>%
  filter(dataMuestra$Genero=='Men')
MaxMens=max(preguntaMen$PrecioUSD)
print('Precio maximo para Men:')
## [1] "Precio maximo para Men:"
print(MaxMens)
## [1] 79.788
TotalVarones=MaxBoys+MaxMens
print('Precio total:')
## [1] "Precio total:"
print(TotalVarones)
## [1] 100.176

Cuales son los precios más caros para las Damas

table(dataMuestra$Genero) 
## 
##   Boys  Girls    Men Unisex  Women 
##     63     43    373    148    373
preguntaGirls<- dataMuestra %>%
  filter(dataMuestra$Genero=='Girls')
MaxGirls=max(preguntaGirls$PrecioUSD)
print('Precio maximo para Girls:')
## [1] "Precio maximo para Girls:"
print(MaxGirls)
## [1] 45.6
preguntaWomen<- dataMuestra %>%
  filter(dataMuestra$Genero=='Women')
MaxWomen=max(preguntaWomen$PrecioUSD)
print('Precio maximo para Women: ')
## [1] "Precio maximo para Women: "
print(MaxWomen)
## [1] 133.644
TotalDamas=MaxGirls+MaxWomen
print('Precio total: ')
## [1] "Precio total: "
print(TotalDamas)
## [1] 179.244
if (TotalDamas>TotalVarones){
  print("Las Damas tienen precio más caro con una diferencia de ")
  print(TotalDamas-TotalVarones)
}else{
  print("Los Varones tienen precio más caro con una diferencia de ")
  print(TotalVarones-TotalDamas)
}
## [1] "Las Damas tienen precio más caro con una diferencia de "
## [1] 79.068

El rango de los precios según el genero de la ropa

ggplot(data = dataMuestra, aes(x = dataMuestra$Genero, y = dataMuestra$PrecioUSD, fill = dataMuestra$Genero)) +
  geom_boxplot() +
  labs(title = "Relación entre el Precio y el Género de la Ropa",
       x = "Género",
       y = "Precio",
       fill = "Género") +
  theme_minimal()
## Warning: Use of `dataMuestra$Genero` is discouraged.
## ℹ Use `Genero` instead.
## Warning: Use of `dataMuestra$PrecioUSD` is discouraged.
## ℹ Use `PrecioUSD` instead.
## Warning: Use of `dataMuestra$Genero` is discouraged.
## ℹ Use `Genero` instead.

La cantidad de ropa Unisex que saca cada marca

dataHombres <- dataMuestra %>% filter(Genero == "Unisex")
ggplot(data = dataHombres, aes(x = dataHombres$MarcaProducto, fill = dataHombres$Genero)) +
  geom_bar(position="dodge") +
  labs(title = "Relación entre la Marca y el Género de la Ropa",
       x = "Marca",
       y = "Conteo",
       fill = "Género") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90)) 
## Warning: Use of `dataHombres$MarcaProducto` is discouraged.
## ℹ Use `MarcaProducto` instead.
## Warning: Use of `dataHombres$Genero` is discouraged.
## ℹ Use `Genero` instead.

mosaico!! Ronaldinho.